home *** CD-ROM | disk | FTP | other *** search
- #include <exec/types.h>
- #include <exec/exec.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <time.h>
- #include "sc:ae/CModGlue/doorheader.h"
- #include "sc:ae/CModGlue/glue.h"
- #define SM sendmessage
- #define sm sendmessage
- #define pm prompt
- #define PM prompt
- #define HK hotkey
- #define hk hotkey
- #define GU getuserstring
- #define gu getuserstring
- #define sr StripReturn
- char Date[12];
- void end(void);
- void GetLocal(void);
- void ListIt(void);
- void Help(void);
- void ViewIt(void);
- void StripReturn(char *s);
- void ViewDesc(int dirnum,char *startdate,int shortlist);
- char MasterFile[200];
- int Reserved(char *Str,char Filter[]);
- int Yes=0;
- void FlagThem(void);
- void MarkNumbers(char *str);
- long NumList[2000];
- int NumChoose[2000];
- void ConvertDate(long);
- void main(int argc,char *argv[]);
- void LastCommand(void);
- void creds(void);
- char command[200];
- FILE *fi=NULL;
- void main(int argc,char *argv[])
- {
- int i=0;int j;
- char startdate[100];
- int dirnum=0;
- int shortlist=0;
- strcpy(startdate,"");
- if(argc!=2)
- {
- printf("FlagFile v2.1, written by Joseph Hodge\n");
- printf("Compatible with AmiExpress v1.1u+\n");
- printf("This is a type 'X' door.\n");
- exit(0);
- }
- Register(argv[1][0]-'0');
- gu(command,BB_MAINLINE);
- i=0;
- while(command[i]!='\0' && command[i]!=' ') i++;
- if(command[i]==' ')
- {
- i++;
- j=0;
- while(command[i]!='\0' && command[i]!=' '){ startdate[j]=command[i];i++;j++; }
- startdate[j]='\0';
-
- if(command[i]==' ')
- {
- i++;
- if(command[i]=='U' || command[i]=='u')
- {
- dirnum=-1;
- }else dirnum=atoi(&command[i]);
- while(command[i]!='\0' && command[i]!=' ') i++;
- if(command[i]==' ') shortlist=1;
- }
- }
- i=0;
- while(i<2000)
- {
- NumList[i]=-1L;
- NumChoose[i]=-1;
- i++;
- }
- ViewDesc(dirnum,startdate,shortlist);
- ShutDown();
- end();
- }
- void ViewDesc(int dirnum,char *startdate,int shortlist)
- {
- char Dir[200];
- char FileName[200];
- int ndir;
- int Lines;
- long TheDate;
- int cline;
- long Position;
- long Ks;
- int ns=0;
- int broke=0;
- int needflags=0;
- int j,i,occurance;
- int size;
- int k;
- long FileNum=0L;
- char Numbers[200];
- char Number[200];
- BOOL GoodDate=FALSE;
- LONG timelast;
-
- PutInfo(1,BB_NONSTOPTEXT);
- strcpy(Numbers,"");
- GU(Dir,DT_TIMELASTON);
- timelast=atol(Dir);
- GU(Dir,DT_LINELENGTH);
- Lines=atoi(Dir);
- GU(Dir,BB_CONFLOCAL);
- strcat(Dir,"ndirs");
- sm("",1);
- if(startdate[0]=='?')
- {
- creds(); return;
- }
- fi=fopen(Dir,"r");
- if(fi==NULL)
- {
- sm("Files are not supported in this conference.",1);
- return;
- }
- fgets(Dir,80,fi); fclose(fi); ndir=atoi(Dir);
-
- if(startdate[0]=='\0')
- {
- ConvertDate(timelast);
- sprintf(Dir,"Date as (mm-dd-yy) to begin list (Enter)=%s: ",Date);
- pm(Dir,Date,8);
- }else sprintf(Date,"%-8.8s",startdate);
- if(Date[0]=='S' || Date[0]=='s') strcpy(Date,"");
- if(Date[0]=='-')
- {
- i=atoi(Date);
- timelast += (LONG)(i*24*60*60);
- ConvertDate(timelast);
- }
-
- sr(Date);
-
- if(dirnum==-1) dirnum=ndir;
- if(dirnum<=0 || dirnum>ndir)
- {
- sprintf(Dir,"Directories: (1-%d), (Upload), (Enter)=none? ",ndir);
- pm(Dir,Dir,3);
- if(Dir[0]=='\0') strcpy(Dir,"Q");
- if(Dir[0]=='U' || Dir[0]=='u') sprintf(Dir,"%d",ndir);
- if(atoi(Dir)>ndir || atoi(Dir)<1 || Dir[0]=='Q' || Dir[0]=='q')
- {
-
- if(Dir[0]=='Q' || Dir[0]=='q') return;
- sm("",1);
- sm("That Directory does not exist.",1);
- return;
- }
-
- ndir=atoi(Dir);
- }else ndir=dirnum;
- GU(Dir,BB_CONFLOCAL);
- sprintf(FileName,"%sdir%d",Dir,ndir);
-
- if(Date[0]=='\0') ConvertDate(timelast);
- i=0;j=0;occurance=0;
- TheDate=0L;
- strcat(Date," ");
- while(Date[i]!='\0')
- {
- if(Date[i]<'0' || Date[i]>'9')
- {
- Date[i]='\0';
- switch(occurance)
- {
- case 0: TheDate +=(atol(&Date[j])*32L); j=i+1; occurance +=1; break;
- case 1: TheDate +=(atol(&Date[j])); j=i+1; occurance +=1; break;
- case 2: TheDate +=(atol(&Date[j])*365L); j=i+1; occurance +=1; break;
- }
- }
- i++;
- }
- GoodDate=FALSE;
-
- fi=fopen(FileName,"r");
- if(fi==NULL)
- {
- sm("Error! Cannot locate that directory listing.",1);
- return;
- }strcpy(MasterFile,FileName);
- cline = Lines-3;
- Position=ftell(fi);
- sm("",1);
-
- while(fgets(Dir,180,fi)!=NULL)
- {
- if(broke) goto passthru;
- if(FetchKey())
- {
- cline=0; sm("",1); sm("***break",1);
- broke=1;
- if(!Yes) { fclose(fi); fi=NULL; return; }
- goto passthru; }
- if(!cline && !ns)
- {
- needflags=0;
- cline=Lines-3;
- sm("(Pause)...(f)lags",0);
- sm(", More(Y/n/ns)? ",0);
- pm("",Number,180);
- sm("A",0);
- if(!strnicmp(Number,"NS",2)) { ns=1; goto passthru; }
- if(Number[0]=='n' || Number[0]=='N')
- {
- broke=1; cline=0; ns=1;
- if(!Yes) {fclose(fi); fi=NULL; return; }
- goto passthru;
- }
- if(Number[0]=='f' || Number[0]=='F')
- {
- if(strlen(Number)>2)
- {
- k=0;
- while(Number[k]!='\0') { Number[k]=Number[k+2]; k++; }
- }else
- {
- sprintf(Number,"File#(s) to flag: (Enter)=none? ");
- pm(Number,Number,200);
- sm("A",0);
- }
- if(Number[0]!='\0')
- {
- MarkNumbers(Number);}
- }
-
- }
- else if(GoodDate && !shortlist)cline--;
-
- sr(Dir);
-
- passthru:
-
- if(Dir[0]!='\0' && Dir[25]=='-' && Dir[28]=='-' && Dir[27]!='-')
- {
- FileNum +=1L;
- if(FileNum==1999L)
- {
- i=0;
- if(Yes) FlagThem();
- Yes=0;
-
- while(i<2000)
- {
- NumList[i]=-1L;
- NumChoose[i]=-1;
- i++;
- }
- FileNum=1L;
- }
- NumList[FileNum]=Position;
- if(!broke)
- {
- Ks=atol(&Dir[14]);
- if(Ks>999L){ Ks /=1000L; size='k'; } else size='b';
-
- /*
- if(Dir[13]=='P')
- sprintf(FileName,"%4d.%-13.13s%4dK%-9.9s%s",FileNum,Dir,Ks,&Dir[22],&Dir[32]);
- else
- sprintf(FileName,"%4d.%-13.13s%4dK%-9.9s%s",FileNum,Dir,Ks,&Dir[22],&Dir[32]);
- */
- if(Dir[13]=='P')
- sprintf(FileName,"%4d %-13.13s%4d%c%-9.9s%s",FileNum,Dir,Ks,size,&Dir[22],&Dir[32]);
- else
- sprintf(FileName,"%4d %-13.13s%4d%c%-9.9s%s",FileNum,Dir,Ks,size,&Dir[22],&Dir[32]);
-
- if(TheDate<=atol(&Dir[29])*365L+atol(&Dir[23])*32L+atol(&Dir[26]))
- { GoodDate=TRUE; if(shortlist) cline--; }
- if(GoodDate){
- sm(FileName,1); needflags=1;}
-
- }
- }else if(GoodDate && !shortlist && !broke)sm(Dir,1);
- Position=ftell(fi);
- }
-
- if(((cline && GoodDate==TRUE) || needflags) && !ns && !broke)
- {
- sm("(last entry)...(f)lags",0);
- sm(", (Enter)=none? ",0);
- pm("",Number,180);
-
- sm("A",0);
- if(Number[0]=='f' || Number[0]=='F')
- {
- if(strlen(Number)>2)
- {
- k=0;
- while(Number[k]!='\0') { Number[k]=Number[k+2]; k++; }
- }else
- {
- sprintf(Number,"File#(s) to flag: (Enter)=none? ");
- pm(Number,Number,200);
- sm("A",0);
- }
- if(Number[0]!='\0')
- {
- MarkNumbers(Number);}
-
- }
- }
-
- fclose(fi); fi=NULL;
- if(Yes)
- {
- FlagThem();
- }
- }
- void FlagThem(void)
- {
- register int i;
- register int total=0;
- FILE *fi;
- char image[200];
- char temp[200];
- fi=fopen(MasterFile,"rb");
- i=1; while(i<2000)
- {
- if(NumChoose[i]==1 && NumList[i]>-1L)
- {
-
- fseek(fi,NumList[i],SEEK_SET);
- fgets(image,13,fi);
- sr(image); total +=1;
- FlagFile(image);
- }
- i++;
- }
-
- fclose(fi);
- sm("",1);
- sprintf(temp,"%d files have been flagged",total);
- sm(temp,1);
- }
- void MarkNumbers(char *str)
- {
- char Number[200];
- register int i;
- register int j;
- register int k;
- long num=0L;
- long prevnum=0L;
- long t;
- strcpy(Number,str);
- i=0;
- k=strlen(Number);
- j=1;
- while(i<k)
- {
- if(j)
- {
-
- while(Number[i]<'0' && Number[i]>'9' && Number[i]!='\0') i++;
- if(Number[i]=='\0') break;
- }
- if(j) { num=atol(&Number[i]);
- if(prevnum<num && prevnum)
- {
- t=num; for(num=prevnum+1L;num<=t;num++)
- {
- if(num>0L && num<2000L)
- {
-
- NumChoose[num]=1; Yes=1;
- }
- }
- }
- else
- {
- if(num>0L && num<2000L)
- {
-
- NumChoose[num]=1; Yes=1;
- }
- }
- }
-
- if(Number[i]==',' || Number[i]==' ' || Number[i]=='-') j=1; else j=0;
- if(Number[i]=='-') prevnum=num; else prevnum=0L;
- i++;
- }
- }
-
-
- void end(void)
- {
- if(fi!=NULL) fclose(fi);
- exit(0);
- }
- void ConvertDate(long t)
- {
- struct tm *tp;
- int M,D,Y;
- long tg;
- char Day[4],Month[5],Year[3];
- char TheTime[27];
- tg=t;
- tp=localtime(&tg);
- sprintf(TheTime,"%s",asctime(tp));
- sprintf(Day,"%.2s",&TheTime[8]);
- sprintf(Month,"%.3s",&TheTime[4]);
- sprintf(Year,"%.2s",&TheTime[22]);
- D=atoi(Day);
- Y=atoi(Year);
-
- if(!strncmp(Month,"Jan",3)) M=1;
- if(!strncmp(Month,"Feb",3)) M=2;
- if(!strncmp(Month,"Mar",3)) M=3;
- if(!strncmp(Month,"Apr",3)) M=4;
- if(!strncmp(Month,"May",3)) M=5;
- if(!strncmp(Month,"Jun",3)) M=6;
- if(!strncmp(Month,"Jul",3)) M=7;
- if(!strncmp(Month,"Aug",3)) M=8;
- if(!strncmp(Month,"Sep",3)) M=9;
- if(!strncmp(Month,"Oct",3)) M=10;
- if(!strncmp(Month,"Nov",3)) M=11;
- if(!strncmp(Month,"Dec",3)) M=12;
- sprintf(Date,"%02d-%02d-%02d",M,D,Y);
- }
- void LastCommand(void)
- {
- PutInfo(0,BB_NONSTOPTEXT);
-
- sm("",1);
- }
-
- void StripReturn(char *s)
- {
- register int i;
- i=strlen(s)-1;
- while(i>-1)
- {
- if(*(s+i)<=32) *(s+i)='\0'; else break;
- i--;
- }
- }
-
- void creds(void)
- {
- sm("",1);
- sm( " .-----------------------------------------------------.",1);
- sm( " | Ami-Express FlagFile Version 2.1 |",1);
- sm( " | Written by Joseph Hodge. |",1);
- sm( " | /X Development Team - The Silent Achievers |",1);
- sm( " `-----------------------------------------------------'",1);
- sm("",1);
- sm(" Syntax: <command> <mm-dd-yy | a | s > <directory | u > [b]",1);
- sm("",1);
- sm(" command = sysop defined",1);
- sm("",1);
- sm(" mm-dd-yy = date to display from",1);
- sm(" a = display from beginning of directory",1);
- sm(" s = display since last display date",1);
- sm("",1);
- sm(" directory = directory number to list",1);
- sm(" u = upload directory to list",1);
- sm("",1);
- sm(" b = display one line descriptions",1);
- sm("",1);
-
- }
-